﻿#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
using namespace std;

//2.基类和派生类对象赋值转换
class Person {
protected:
	string _name;
	string _sex;
	int _age;
};

class Student : public Person {
public:
	int _No;
};

int main() {
	double d = 2.2;
	//int& i = d;//编译报错
	const int& i = d;

	string str = "xxxx";
	//string& rstr = "xxxx";//编译报错
	const string& rstr = "xxxx";
	//隐式类型转换会生成临时对象，临时对象具有常性，所以引用加const

	Student s;
	Person p = s;//公有继承情况下，子类(派生类)可以赋值给父类(基类)
	Person& rp = s;
	//public继承，子类对父类是is-a的关系。
	//子类对象赋值给父类对象/父类指针/父类的引用可以认为是天然的，中间不产生临时对象，这个叫父子类赋值兼容规则(切割/切片)。
	//子类对象赋值给父类对象：把子类中 父类也有的成员 赋值给父类
	//父类引用子类：仅引用子类中 父类也有的成员
	return 0;
}